import axios from 'axios'

let cancel, promiseArr = {}
const CancelToken = axios.CancelToken;
//请求拦截器
axios.interceptors.request.use(config => {
    //发起请求时，取消掉当前正在进行的相同请求
    if (promiseArr[config.url]) {
        promiseArr[config.url]('操作取消')
        promiseArr[config.url] = cancel
    } else {
        promiseArr[config.url] = cancel
    }
    return config
}, error => {
    return Promise.reject(error)
})

//响应拦截器即异常处理
axios.interceptors.response.use(response => {
    return response
}, err => {
    if (err && err.response) {
        switch (err.response.status) {
            case 400:
                err.msg = '错误请求'
                break;
            case 401:
                err.msg = '未授权，请重新登录'
                break;
            case 403:
                err.msg = '拒绝访问'
                break;
            case 404:
                err.msg = '请求错误,未找到该资源'
                break;
            case 405:
                err.msg = '请求方法未允许'
                break;
            case 408:
                err.msg = '请求超时'
                break;
            case 500:
                err.msg = '服务器端出错'
                break;
            case 501:
                err.msg = '网络未实现'
                break;
            case 502:
                err.msg = '网络错误'
                break;
            case 503:
                err.msg = '服务不可用'
                break;
            case 504:
                err.msg = '网络超时'
                break;
            case 505:
                err.msg = 'http版本不支持该请求'
                break;
            default:
                err.msg = `连接错误${err.response.status}`
        }
    } else {
        err.msg = "连接到服务器失败"
    }
    return Promise.resolve({data:{code:0,msg:err.msg}})    //code->0 错误
})

//设置baseURL
axios.defaults.baseURL = 'http://app.zlkgsy.com';
//设置请求超时
axios.defaults.timeout = 10000;

export default {
    //get请求
    get(url, param) {
        return axios({
            method: 'get',
            url,
            params: param,
            cancelToken: new CancelToken(c => {
                cancel = c
            })
        })
    },
    //post请求
    post(url, param) {
        return axios({
            method: 'post',
            url,
            data: param,
            cancelToken: new CancelToken(c => {
                cancel = c
            })
        })
    }
}